<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        body {
            background: #000;
            text-align: center
        }

        #c1 {
            background: #fff;
        }
    </style>

</head>

<body>
    <canvas id="c1" width="800" height="600">

    </canvas>
</body>
<script>
    /**
     * 1.数据
     * 煤炭 水利  核能  风能
     * 3800 152  361   487
     * 2.算总和
     * 4800
     * 3.占比
     * 79.17%  3.17%  7.52%  10.15%
     * 4.占多少角度
     * 285 11.4 27 36.5
     * 5每个数据的起始角度，和结束角度
     */
    //角度转弧度
    function d2a(n){
        return n*Math.PI/180
    }
    //弧度转角度
    function a2d(n){
        return n*180/Math.PI
    }
    // 1.获取数据
    let data=[12,99,45,75];  
    let colorArr=['red','yellow','red','yellow']
    // 2. 求总和
    let sum=data.reduce((tmp,item,index)=>tmp+item);  
    // 3. 数据站比->角度占比
    let angs=data=data.map((item)=>360*item/sum)   
    // 4. 画 以上一个pie结束的角作为下一个pie开始的角
    let last=0;
    let oC = document.getElementById('c1');
    let gd = oC.getContext('2d');       //图形上下文-绘图用的接口
    let cx = 400, cy = 300, r = 150;

    function pie(startAng,endAng,color){
        gd.moveTo(cx, cy);
        let x=cx+Math.sin(d2a(startAng))*r
        let y=cy-Math.cos(d2a(startAng))*r
        gd.lineTo(x, y)
        gd.arc(cx,cy,r,d2a(startAng-90),d2a(endAng-90),false)
        gd.closePath()
        gd.fillStyle=color
        gd.fill()
        gd.stroke()
        gd.beginPath()
    }
    angs.forEach((ang,index)=>{
        pie(last,last+ang,colorArr[index])
        last=last+ang
    })
   
   
</script>

</html>